package com.tabnet.servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.tabnet.beans.produit.GammeProduit;
import com.tabnet.beans.produit.Produit;
import com.tabnet.dao.DAOException;
import com.tabnet.dao.DAOFactory;
import com.tabnet.dao.DAOGammeProduit;
import com.tabnet.form.DetailProduitForm;

public class DetailProduit extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	public static final String ATT_FORM        	= "form";
    public static final String SESSION_GAMME	= "gammesProduits";
    public static final String SESSION_PRODUIT	= "produit";
    public static final String PARAM_PRODUIT	= "prod";
    public static final String VUE              = "/index.jsp";
    public static final String VUE_SUCCES 	    = "/WEB-INF/detailProduit.jsp";

    private DAOGammeProduit _GammeProduitDao;
    
    public void init() throws ServletException {
        /* Récupération d'une instance de notre DAO Utilisateur */
    	try {
			this._GammeProduitDao = DAOFactory.getInstance().getGammeProduitDAO();
		}
    	catch (DAOException e) {
			e.printStackTrace();
		}
    }
    
    @SuppressWarnings("unchecked")
	public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

        // Récupération de la valeur de l'URL
        String refGamme = getValeurParametre( request, PARAM_PRODUIT );
        Produit oProduit = null;
        
        HttpSession session = request.getSession();
        Map<String, GammeProduit> mapGammeProduits = (HashMap<String, GammeProduit>) session.getAttribute(SESSION_GAMME);

        if(mapGammeProduits == null || mapGammeProduits.size() == 0){
	        DetailProduitForm form = new DetailProduitForm(this._GammeProduitDao);
	        oProduit = form.recupProduit(request, refGamme);

	        request.setAttribute( ATT_FORM, form );
	        
	        if ( form.getErreurs().isEmpty() && oProduit != null) {
	            session.setAttribute( SESSION_PRODUIT, oProduit);
	        	this.getServletContext().getRequestDispatcher( VUE_SUCCES + "?" + PARAM_PRODUIT + "=" + oProduit.getRef() ).forward( request, response );
	        }
	        else {
	            session.setAttribute( SESSION_PRODUIT, null);
	            response.sendRedirect( request.getContextPath() + VUE );
	        }
        }
        else {
	        request.setAttribute( ATT_FORM, null );
	        
	    	// Récupération du produit sélectionnée
	        oProduit = mapGammeProduits.get(refGamme).getProduitG();
	    	
	        // Affichage du produit sélectionnée
	        session.setAttribute( SESSION_PRODUIT, oProduit);
	    	if(oProduit != null)
	        	this.getServletContext().getRequestDispatcher( VUE_SUCCES + "?" + PARAM_PRODUIT + "=" + oProduit.getRef() ).forward( request, response );
	    	else
	            response.sendRedirect( request.getContextPath() + VUE );
        }
    }

    public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        this.doGet(request, response);
    }
    
    /**
     * <p>Fonction static getValeurParametre<br />
     * Utilitaire qui retourne null si un paramètre est vide, et son
     * contenu sinon.</p>
     * @param request : objet HttpServletRequest
     * @param nomChamp : nom du champ
     * @return la valeur du champ
     */
    private static String getValeurParametre( HttpServletRequest request, String nomChamp ) {
        String valeur = request.getParameter( nomChamp );
        if ( valeur == null || valeur.trim().length() == 0 ) {
            return null;
        } else {
            return valeur;
        }
    }
}
